<script setup lang="ts">
interface Props {
  fullscreen: boolean;
}
const props = withDefaults(defineProps<Props>(), {
  fullscreen: false
});
</script>

<template>
  <div data-v_loading class="loading-mask" :class="{ screen: fullscreen }">
    <div class="loading-spinner">
      <svg class="circular" viewBox="25 25 50 50">
        <circle class="path" cx="50" cy="50" r="20" fill="none" />
      </svg>
    </div>
  </div>
</template>

<style scoped lang="scss">
.screen {
  width: 100vw !important;
  height: 100vh !important;
}
.loading-mask {
  width: 100%;
  height: 100%;
  position: absolute;
  top: 0;
  left: 0;
  display: flex;
  justify-content: center;
  align-items: center;
}
.loading-spinner {
  background-color: var(--m-mask-color);
}
.circular {
  display: inline;
  height: var(--m-loading-spinner-size);
  width: var(--m-loading-spinner-size);
  animation: loading-rotate 2s linear infinite;
  .path {
    animation: loading-dash 1.5s ease-in-out infinite;
    stroke-dasharray: 90, 150;
    stroke-dashoffset: 0;
    stroke-width: 2;
    stroke: var(--m-color-primary);
    stroke-linecap: round;
  }
}
@keyframes loading-rotate {
  100% {
    transform: rotate(360deg);
  }
}
@keyframes loading-dash {
  0% {
    stroke-dasharray: 1, 200;
    stroke-dashoffset: 0;
  }
  50% {
    stroke-dasharray: 90, 150;
    stroke-dashoffset: -40px;
  }
  100% {
    stroke-dasharray: 90, 150;
    stroke-dashoffset: -120px;
  }
}
</style>
